#ifndef VECTOR3D
#define VECTOR3D

class Vector3D {
public:
	float x;
	float y;
	float z;
	Vector3D(void);
	Vector3D(float ix, float iy, float iz);

	void setNull();
	void normalize();
	float length() const;
	void add(const Vector3D& v);
	bool isEqual(const Vector3D& v);
	Vector3D crossProduct(const Vector3D &vec) const;
	float dotProduct(const Vector3D& vector);
	float angle(const Vector3D& vector);

	float calculateDistance(const Vector3D& v2);

	void operator += (const Vector3D& v);
};

// operator to return additive inverse
Vector3D operator - (const Vector3D& v);
Vector3D operator - (const Vector3D& v, const Vector3D& w);
Vector3D operator + (const Vector3D& v, const Vector3D& w);
Vector3D operator * (float f, const Vector3D& v);
Vector3D operator * (const Vector3D& v, float f);
// Dot product of two vectors
float operator * (const Vector3D& v, const Vector3D& w);

#endif